﻿//---*Authenticity Seal
/*			                                _ .--.
					                       ( `    )
									     .-'      `--,
			                  _..----.. (             )`-.
			                .'_|` _|` _|(  .__,           )
						   /_|  _|  _|  _(        (_,  .-'
			              ;|  _|  _|  _|  '-'__,--'`--'
			              | _|  _|  _|  _| |
			          _   ||  _|  _|  _|  _|
			        _( `--.\_|  _|  _|  _|/
			      .-'       )--,|  _|  _|.`
				(__, (_      ) )_|  _| /
			      `-.__.\ _,--'\|__|__/
			                    ;____;
			                     \  /
								  OO
			                     |""|
			                     '=='
			                     
           			 Autor: Federico Angel Donnet
*/
//---*Authenticity Seal
//---*Este Script se encarga de crear las instancias singleton de interes en el Editor.
//---*Crea por ejemeplo el SceneController, SoundFactoryController, etc...
using UnityEngine;
using System.Collections;
//[ExecuteInEditMode]
public class SceneManagerScript : MonoBehaviour 
{


	//----------------//
	//---*Atributos:
	//----------------//
	//---*SubClase Auxiliar que nos sirve para mostrar en pantalla
	//---*diferentes datos de interes, como los FPS:
	[System.Serializable]
	public	class 	Statistics
	{
		//----------------//
		//---*Atributos:
		//----------------//
		//---*Flag que indica si debe o no mostrar los FPS desde un GUIText
		public	bool	showFPS													=	false;
		//----------------//
		//---*Metodos:
		//----------------//

	};

	//---*SubClase Auxiliar que se encarga de "armar" el singleton "EmitterFactoryControllerScript"
	[System.Serializable]
	public	class 	EmitterFactory
	{
		//----------------//
		//---*Atributos:
		//----------------//
		//---*Vector de Emisores de particulas (para pasarlos al "SceneControllerScript":
		public	GameObject[]		EmitterPackages								=	null;
		//----------------//
		//---*Metodos:
		//----------------//
		
	};

	//---*SubClase Auxiliar que se encarga de "armar" el singleton "SoundFactoryControllerScript"
	[System.Serializable]
	public	class 	SoundFactory
	{
		//----------------//
		//---*Atributos:
		//----------------//
		//---*Vector de Sound Packages (para pasarlos al "SoundFactoryControllerScript":
		public	GameObject[]		SoundPackages								=	null;
		//---*Cantidad de AudioSources que va a tener el pool de AudioSources (por defecto 5):
		public	int					nAudioSources								=	5;
		//----------------//
		//---*Metodos:
		//----------------//
		
	};


	//---*Referencia del Transform del gameObject que posee como childs los gameObjects
	//---*que tienen componentes (Scripts) Singleton:
	[HideInInspector]
	public	Transform			singletonUtils								=	null;
	//---*Referencia de la SubClase "Statistics":
	public	Statistics			stats										=	null;
	//---*Referencia de la SubClase "EmitterFactory"
	public	EmitterFactory		emitterFactory								=	null;
	//---*Referencia de la SubClase "SoundFactory":
	public	SoundFactory		soundFactory								=	null;

	//----------------//
	//---*Metodos:
	//----------------//
	// Use this for initialization
	void Start () 
	{

		//---*Primero, antes que nada, crea un gameObject donde podemos asignar aquellos 
		//---*gameObjects con componentes Singleton (Scripts) como childs:
		if(this.singletonUtils == null)
		{
			this.singletonUtils = new GameObject("SingletonUtils").transform; 
			//---*Posicionamos en 0,0,0:
			this.singletonUtils.transform.position = Vector3.zero;
			//---*Le decimos que el gameObject que posee este Script como componente es el parent:
			this.singletonUtils.transform.parent = this.gameObject.transform;		

			//---*Inicia el SceneControllerScript, creando la instancia Singleton del mismo
			//---*hace child al gameObject encargado de dicha instancia:
			SceneControllerScript.getInstance().Init();
			//---*Toma el transform del gameObject con el singleton (SceneControllerScript) y lo hace child del
			//---*gameObject que posee este Script como componente:
			SceneControllerScript.getInstance().gameObject.transform.parent 			=	this.singletonUtils.transform;


			//---*Inicia el EmitterFactoryControllerScript, creando la instancia Singleton del mismo
			//---*hace child al gameObject encargado de dicha instancia:
			EmitterFactoryControllerScript.getInstance().Init();
			//---*Toma el transform del gameObject con el singleton (SceneControllerScript) y lo hace child del
			//---*gameObject que posee este Script como componente:
			EmitterFactoryControllerScript.getInstance().gameObject.transform.parent 	=	this.singletonUtils.transform;
			//---*Se les setea los EmittersPackages:
			EmitterFactoryControllerScript.getInstance().EmittersPackages				=	this.emitterFactory.EmitterPackages;

			//---*Inicia el SoundFactory, creando la instancia Singleton del mismo
			//---*hace child al gameObject encargado de dicha instancia:
			SoundFactoyControllerScript.getInstance().Init();
			//---*Toma el transform del gameObject con el singleton (SoundFactory) y lo hace child del
			//---*gameObject que posee este Script como componente:
			SoundFactoyControllerScript.getInstance().gameObject.transform.parent 		= this.singletonUtils.transform;
			//---*Les pasamos todos los SoundPackages:
			SoundFactoyControllerScript.getInstance().Packages 							=	this.soundFactory.SoundPackages;
			//---*Le indicamos la cantidad de AudioSource que debe hacer el pool de AudioSources:
			SoundFactoyControllerScript.getInstance().nAudioSources 					=	this.soundFactory.nAudioSources;
		}

		//---*Ve si es necesario mostrar los FPS:
		switch(this.stats.showFPS)
		{
							
			case false:
				this.gameObject.transform.Find("FPS GUIText").gameObject.SetActive(false);
			break;

		}

	
	}
	

}
